//
//  UserAccountViewModel.swift
//  weibo
//
//  Created by cmh on 15/9/6.
//  Copyright © 2015年 cmh. All rights reserved.
//

import UIKit
import ReactiveCocoa

class UserAccountViewModel: NSObject {

    // 单例
    static let shareUserAccount = UserAccountViewModel()
    
    // 重写构造函数,加载初始化的时候加载用户信息
    override init() {
        userAccount = UserAccount.loadUserAccountInfo()
    }

    // 用户账户模型
    var userAccount: UserAccount?
    
    // token 
    var accessToken: String? {
        return userAccount?.access_token
    }
    
    // 判断登陆状态
    var userLogon: Bool {
        return accessToken != nil
    }
    
    // 头像地址
    var headIconUrl: NSURL? {
        
        return NSURL(string: userAccount?.avatar_large ?? "")
    }
    
    // MARK: - 加载用户信息
    func loadUserAccount(code: String) -> RACSignal {

        return RACSignal.createSignal({ (subscriber) -> RACDisposable! in
        
            // 第一个信号，得到账户信息
            NetWrokTools.shareTools.loadAccessToken(code).doNext({ (result) -> Void in
                
                let account = UserAccount(dict: result as! [String: AnyObject])
                
                self.userAccount = account

                // 第二个信号，得到用户详细信息
                 NetWrokTools.shareTools.loadUserInfo(account.uid!).subscribeNext({ (result) -> Void in
                    
                    let dict = result as! [String: AnyObject]
                    
                    // 设置属性
                    account.name = dict["name"] as? String
                    account.avatar_large = dict["avatar_large"] as? String
                    
                    printLog(account)
                    
                    // 保存账号
                    account.saveUserAccount()
                    
                    // 通知订阅者，网路数据加载完成
                    subscriber.sendCompleted()
                    

                    }, error: { (error) -> Void in
                        subscriber.sendError(error)
                 })
            }).subscribeError({ (error) -> Void in
                subscriber.sendError(error)
            })

            return nil
            
        })

    }

}
